package com.winbomb.kingcard;

/**
 * 势力的接口
 * 
 * @author winbomb
 * 
 */
public interface IForce {

	/**
	 * 获取势力的主人
	 * 
	 * @return
	 */
	public IPlayer getMaster();

	/**
	 * 更换势力的主公
	 * 
	 * @param master
	 */
	public void changeMaster(IPlayer master);

	/**
	 * 更新势力
	 * 
	 * 用于旧的主人被灭时,需要设置新的主人
	 * 
	 * @param master
	 */
	public void update();

	public int getMemeberCount();

	/**
	 * 获取成员(包括主人)
	 * 
	 * @return
	 */
	public IPlayer[] getMembers();

	/**
	 * 添加一个成员
	 * 
	 * 当一个玩家被另一个玩家灭掉以后,需要添加被灭的玩家到灭掉他的玩家的势力中去.
	 * 
	 * @param member
	 */
	public void addMember(IPlayer member);

	/**
	 * 移除一个成员
	 * 
	 * 1. 当某个势力中的玩家被别的势力灭掉后,需要从该势力中去除这个玩家.
	 * 
	 * 2. 当某个玩家宣布独立后,需要从该势力中去除这个玩家
	 * 
	 * @param member
	 */
	public void removeMember(IPlayer member);

	/**
	 * 获得该势力所占有的牌的数量
	 * 
	 * @return
	 */
	public int getCardCount();

	/**
	 * 获取势力的标志
	 * 
	 * @return
	 */
	public int getForceFlag();

	/**
	 * 获取同盟的标志
	 * 
	 * -1表示没有同盟
	 * 
	 * @return
	 */
	public int getAleinFlag();

	/**
	 * 设置同盟标志
	 * 
	 * @param flag
	 */
	public void setAleinFlag(int flag);

	/**
	 * 设置关系
	 * 
	 * @param force
	 */
	public void setRelation(IForce force, int relation);

	/**
	 * 检查与force是否有relation的关系
	 * 
	 * @param force
	 * @param relation
	 * @return
	 */
	public boolean hasRelation(IForce force, int relation);

	/**
	 * 清除关系
	 */
	public void clearRelations();

}
